#ifndef __SERVIDOR__
#define __SERVIDOR__

#include "jugador.h"
#include "partida.h"
#include "ListaJugadores.h"

#define SERVER_PORT 7770
#define MAX_CONNECTED_CLIENTS 10
#define THREAD_COUNT MAX_CONNECTED_CLIENTS / 2

typedef struct Servidor{
    ListaJugadores* jugadores;      // lista de jugadores conectados
    ListaJugadores* jugadoresDisponibles;       // lista de jugadores sin partida
    Partida* partidas[MAX_CONNECTED_CLIENTS /2 ]; // lista de partidas
}Servidor;

// Crea un servidor
Servidor* Servidor_create();

// Libera recuross de un servidor
void Servidor_destroy(Servidor* servidor);


// Devuelve las partidas en el vector "partidas"
void Servidor_getPartidasActivas(Servidor* servidor, Partida* partidas[]);

// Devuelve los jugadores disponibles
void Servidor_getJugadoresDisponibles(Servidor* servidor, Jugador* jugadores[]);

// Devuelve todos los jugadores conectados
void Servidor_getJugadoresConectados(Servidor* servidor, Jugador* jugadores[]);

void Servidor_addJugadorDisponible(Servidor* servidor, Jugador* jugador);

void Servidor_removeJugadorDisponible(Servidor* servidor, Jugador* jugador);


// Invita solicitud de nueva partida, enviada desde jugador1 hacia jugador2
void Servidor_sendPartidaRequest(struct Servidor* servidor, struct Jugador* jugador1, struct Jugador jugador2);

#endif // __SERVIDOR__
